package com.topscomm.tap.common;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * @description:使用redis存储CboItemDetails表的数据
 * @author: zhanglongfei
 * @date: 2020年12月17日下午2:38:33
 * @modify:
 */
@Component
public class RedisDatacodeStore {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public static final String REDIS_KEY_PREFIX = "datacode:";
    private long expireHour = 12;

    /**
     * @description:缓存数据
     * @param key
     * @param value
     * @author: zhanglongfei
     * @date: 2020年12月17日下午2:52:23
     * @modify:
     */
    public void storeData(String key, List<Map<String, Object>> value) {
        String fullKey = REDIS_KEY_PREFIX + key;
        redisTemplate.opsForValue().set(fullKey, value, expireHour, TimeUnit.HOURS);
    }

    /**
     * @description:查询数据
     * @param key
     * @return
     * @author: zhanglongfei
     * @date: 2020年12月17日下午2:52:45
     * @modify:
     */
    public List<Map<String, Object>> queryData(String key) {
        String fullKey = REDIS_KEY_PREFIX + key;
        Object value = redisTemplate.opsForValue().get(fullKey);
        if (value == null)
            return null;
        try {
            List<Map<String, Object>> trueValue = (List<Map<String, Object>>) value;
            return trueValue;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * @description:
     * @param key
     * @author: zhanglongfei
     * @date: 2021年3月24日下午7:20:23
     * @modify:
     */
    public boolean existKey(String key) {
        String fullKey = REDIS_KEY_PREFIX + key;
        return redisTemplate.hasKey(fullKey);
    }

    /**
     * @description:删除key
     * @param key
     * @author: zhanglongfei
     * @date: 2020年12月17日下午3:25:45
     * @modify:
     */
    public void removeKey(String key) {
        String fullKey = REDIS_KEY_PREFIX + key;
        redisTemplate.delete(fullKey);
    }

    /**
     * @description:清空所有数据
     * @author: zhanglongfei
     * @date: 2020年12月17日下午3:27:59
     * @modify:
     */
    public void clearData() {
        Set<String> keys = redisTemplate.keys(REDIS_KEY_PREFIX + "*");
        if (keys != null) {
            for (String key : keys) {
                redisTemplate.delete(key);
            }
        }
    }
}
